package org.nnxy.foodboot.service;

import org.nnxy.foodboot.entity.Recipe;

import java.util.List;
import java.util.Map;

/**
 * 推荐系统服务接口
 */
public interface RecommendationService {
    
    /**
     * 获取基于用户健康状况的推荐食谱
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 推荐食谱列表
     */
    List<Recipe> getHealthBasedRecommendations(Integer userId, Integer limit);
    
    /**
     * 获取基于用户口味偏好的推荐食谱
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 推荐食谱列表
     */
    List<Recipe> getTasteBasedRecommendations(Integer userId, Integer limit);
    
    /**
     * 获取基于用户之前喜欢的食谱的推荐
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 推荐食谱列表
     */
    List<Recipe> getUserPreferenceBasedRecommendations(Integer userId, Integer limit);
    
    /**
     * 获取与指定食谱相似的推荐食谱
     * @param recipeId 食谱ID
     * @param limit 限制数量
     * @return 推荐食谱列表
     */
    List<Recipe> getSimilarRecipes(Integer recipeId, Integer limit);
    
    /**
     * 获取基于菜系的推荐食谱
     * @param cuisineType 菜系类型
     * @param limit 限制数量
     * @return 推荐食谱列表
     */
    List<Recipe> getCuisineTypeBasedRecommendations(String cuisineType, Integer limit);
    
    /**
     * 获取综合的个性化推荐
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 带分类的推荐食谱映射
     */
    Map<String, List<Recipe>> getPersonalizedRecommendations(Integer userId, Integer limit);
    
    /**
     * 获取热门食谱推荐
     * @param limit 限制数量
     * @return 热门食谱列表
     */
    List<Recipe> getPopularRecipes(Integer limit);
    
    /**
     * 获取最新发布的食谱推荐
     * @param limit 限制数量
     * @return 最新食谱列表
     */
    List<Recipe> getNewRecipes(Integer limit);

    /**
     * 获取用户的推荐食谱
     * @param userId 用户ID
     * @param limit 限制条数
     * @return 推荐的食谱列表
     */
    List<Recipe> getUserRecommendations(Integer userId, Integer limit);

    /**
     * 检查用户是否有推荐数据
     * @param userId 用户ID
     * @return 是否有推荐数据
     */
    boolean hasUserRecommendations(Integer userId);
} 